package com.jz.netthings.bloodsources.utils;

import com.jz.netthings.bloodsources.constant.BloodSourcesConstant;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 【张凡】
 * 功能：【血源管理日期工具类】
 * 日期：【2019年8月8日13:31:42】
 */
public class BloodSourcesDateUtils {
    //定义日期统一格式
   public static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    /**
     * 获取当前日期
     * @return currentTime
     */
   public static Date getCurrentDate() throws  Exception{
       String currentTimeStr = BloodSourcesDateUtils.df.format(new Date());
       Date currentTime= BloodSourcesDateUtils.df.parse(currentTimeStr);
       return currentTime;
   }
    /**
     * 进行日期比较
     * @return isFlag
     * 左边参数大于或等于右边参数，则返回true 反之 false
     */
   public static Boolean dateCompareTo(Date leftDate,Date rightDate){
       Boolean isFlag = false;
       if (leftDate.getTime() >= rightDate.getTime()) {
           return true;// leftDate 在 rightDate 前面
       }
       return  isFlag;
   }

    /**
     * 进行日期差值天数计算
     * @param maxDate 被减数日期
     * @param minDate 减数日期
     * @return dDays  相差天数
     */
   public static Long DdateForTwoDate(Date maxDate,Date minDate){
       Long dDays = 0L;
       Long dLong =  maxDate.getTime() - minDate.getTime();
       dDays = dLong/(24*60*60*1000);
       return  dDays;
   }
    /**
     *
     * @param startTime 需要操作的时间
     * @param days      需要在操作的时间上增|减的天数  单位/天
     * @param type      操作类型 type='add' 或者 type = 'reduce' 表示在操作时间上增加或者减少的操作
     * @return
     */
   public static Date getDateForCondition(Date startTime,Long days,String type){
       Date returnDate = null;
       if(startTime!=null){
           Long timestamp = startTime.getTime();
           if(type.equalsIgnoreCase(BloodSourcesConstant.DATE_TYPE_ADD)){   //增加
               timestamp = timestamp + (days*24*60*60*1000L);
           }else
            if(type.equalsIgnoreCase(BloodSourcesConstant.DATE_TYPE_REDUCE)){//减少
                timestamp = timestamp - (days*24*60*60*1000L);
           }
           returnDate = new Date(timestamp);
       }else{

       }
       return  returnDate;
   }

    public static void main(String[] args) {
        //进行日期获得测试
        //System.out.println(df.format(getDateForCondition(new Date(),1,BloodSourcesConstant.DATE_TYPE_ADD)));
        //System.out.println(df.format(getDateForCondition(new Date(),0,BloodSourcesConstant.DATE_TYPE_ADD)));
        //System.out.println(df.format(getDateForCondition(new Date(),1,BloodSourcesConstant.DATE_TYPE_REDUCE)));
        //进行日期比较测试
//        Date Tomorrow = getDateForCondition(new Date(),1l,BloodSourcesConstant.DATE_TYPE_ADD); //明天
//        Date Today = getDateForCondition(new Date(),0l,BloodSourcesConstant.DATE_TYPE_ADD); //今天
//        Date Yesterday = getDateForCondition(new Date(),1l,BloodSourcesConstant.DATE_TYPE_REDUCE);//昨天
        //今天》昨天
//        System.out.println("今天》昨天:"+dateCompareTo(Today,Yesterday));    //true
//        System.out.println("明天》昨天:"+dateCompareTo(Tomorrow,Yesterday)); //true
//        System.out.println("今天》明天:"+dateCompareTo(Today,Tomorrow));     //false
        try {
            System.out.println(DdateForTwoDate(new Date(),df.parse("2019-08-10 13:00:00")));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
